关于laravel5的excel包maatwebsite/excel的使用笔记
关于安装
官网已经很详细了,不再描述.
http://www.maatwebsite.nl/laravel-excel/docs/getting-started
关于导入
导入的话只有几个小地方需要注意:
-
导入的时候会有产生一些null的cells
$reader->ignoreEmpty(); //or //在循环遍历导入的数据的时候主动忽略null
-
关于中文或者乱码问题
Excel::load('filename.csv', function($reader) { }, 'UTF-8');
或者在配置文件 excel.php(在安装这个模块的文档有介绍怎么生成这个文件)
/* |-------------------------------------------------------------------------- | Sheet heading conversion |-------------------------------------------------------------------------- | | Convert headings to ASCII | Note: only applies to 'heading' settings 'true' && 'slugged' | */ 'to_ascii' => false, //主要修复一些乱码 /* |-------------------------------------------------------------------------- | Import encoding |-------------------------------------------------------------------------- */ 'encoding' => array( 'input' => 'UTF-8', //中文识别 'output' => 'UTF-8' ),
-
导入的时候只读取第一个sheets
$reader = Excel::load($file); $postDataFilter = []; $excelArray = $reader->first()->toArray();
多个表的话
Excel::batch('app/storage/uploads', function($sheets, $file) { $sheets->each(function($sheet) {//这里的$sheet变量就是sheet对象了,excel里的每一个sheet }); });
关于导出
需要先关注一下导出的时候maatwebsite/excel是使用什么数据的
$result2 = array( //这个代表sheet本身
array('data1', 'data2'), //这里代表一行 row,里面的数据就是横向分布的每一个row的cell
array('data3', 'data4') //这里是第二行row
);
这里需要注意的是多个sheet的话,不能直接在数组里面写,要创建多个
$excel->sheet
上面是关于导出数组的构成结构,下面是关于导出的函数需要注意的地方,至于如何完整使用,官方文档说得还算是很清晰的
public function excelExport(){
//这里需要使用use来传递变量给内部闭包,这里假设$result2是一个要转换成excel的数组数据
Excel::create('testexcel', function ($excel) use ($result2, $apiHost) {
$excel->sheet('Sheetname', function ($sheet) use ($result2, $apiHost){
// Sheet manipulation
//需要注意的地方1
$sheet->fromArray($result2, null, 'A1', false, false);
//需要注意的地方2
foreach ($result2 as $index=>$item) {
if($index == 0 ){ //排除标题row
continue;
}
//J2:J代表excel的读取多个cell的写法,写过excel编程的不陌生
$sheet->getHyperlink('J2:J' . (count($result2) + 1))->setUrl($item['url']);
}
});
})->export('xlsx');
}
-
地方1:
这里是将数组转变为sheet的命令,`->fromArray($source, $nullValue, $startCell, $strictNullComparison, $headingGeneration)` 这里需要关注最后一个参数:`$headingGeneration`,默认是打开的,默认会将数组的keys导出,并且在第一行开始,但是一般我们第一行是用做标题的,所以需要关闭,这是例子写法:
$sheet->fromArray($data, null, 'A1', false, false);
那么我们做标题时候还需要手动写入一个标题的row,例如这里是以$result2为例
$tmpHeader = [ 'id', '名称', '标签', //...... ]; $result2[] = $tmpHeader;//将导出数组的第一个元素作为标题,不过需要注意,在构建这个导出数组的时候,真正的数据要从索引1开始,因为0已经是标题了
-
地方2:
这里是将一个cell设置为可点击的网页链接的 这是标准例子
$sheet->getCell('E26') //获得cell ->getHyperlink() //获取Hyperlink对象 ->setUrl('http://examle.com/uploads/cv/' . $cellValue) //设置url ->setTooltip('Click here to access file'); //这里可以不管,只是提示信息
这里是phpexcel的方法,其实laravel-excel是封装在phpexcel上面的,所以大概的方法都差不多
//对比参考一下 //这是设置url跳转的 $objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net'); //这是设置在sheet内部跳转的 $objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl("sheet://'Sheetname'!A1");
那么这里个例子里面是设置单例的,如果我们要设置整个数组的某一列的都变成可点击的话,就需要用循环遍历数组然后,循环seturl了
参考:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。